<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>


        // 递增和递减\
        // 前置递增 ： 先加1 ，在返回值
        var num = 1;
        ++num;
        console.log(num);
        console.log(++num + 10);
        //后置递增 ： 先返回原址，再加1
        console.log(num++ + 10);
        console.log(num);

        //比较运算符
        //三等是全等，值和类型都要相同
        console.log(18 === 18 );
        console.log(18 === '18');

        //逻辑中断
        //逻辑与短路运算  如果表达式1为真，则返回表达式2    如果表达式1为假，则返回表达式1
        //为假的主要有 0 '' null undefined NaN ,其余都为真
        console.log(123 && 456);
        console.log(0 && 456);
        console.log('' && 456);

        //逻辑与短路运算  如果表达式1为真，则返回表达式1    如果表达式1为假，则返回表达式2 （和逻辑与相反）

        //逻辑与比逻辑或的优先级高

        //三元表达式
        //条件表达式 ？ 表达式1 ： 表达式2
        //为真输出表达式1，假输出表达式2

        //遍历数组
        var arr = [1,2,3];
        for(i=0 ; i < 3 ; i++){
            console.log(arr[i]);
        }

        //冒泡排序
        var arr = [1,2,3,4,5];
        for (let i = 0; i < arr.length - 1; i++) {
            for (let j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] < arr[j+1]) {
                    var temp = arr[j];
                    arr[j] = arr [j + 1];;
                    arr[j+1] = temp;
                }
            }
            
        }
        console.log(arr);

        //函数
        function sayHi(){
            console.log('hello!');
        }

        sayHi();

        //arguments 存储了用户传存的所有实参,得到的是伪数组，有长度和索引号，但不能push(),pop()等
        function fh(){
            console.log(arguments);
        }
        fh(1,2,3);

        //再函数内部没有var声明的，也属于全局变量

        //js引擎运行js分为俩步： 预解析  代码执行
        // 1.预解析 会把js中所有的 var 还有 fuctio提升到当前作用域的最前面
        //2. 代码执行 按照代码书写的顺序从上往下执行

        var num4 = 10;
        fun();
        function fun(){
            console.log(num4);
            var num4 = 20;
        }
        //相当于以下代码
        // var num4;
        // function fun(){
        //     var num4;
        //     console.log(num4);
        //     num4 = 20;
        // }
        // num4 = 10;
        // fun();

        //创建对象
        var obj = {
            uname : '张三',
            age : 18,
            sex : '男',
            sayHi : function(){
                console.log('hi');
            }
        }
        //调用
        console.log(obj.uname);
        obj.sayHi();
        //利用new Object创建对象
        var obj1 = new Object();
        obj1.uname = '李四';
        obj1.age = 19;
        obj.sex = '男';
        obj1.sayHi = function(){
            console.log('HI_');
        }
        obj1.sayHi();


        //构造函数创建对象
        function Star(name, age ,sex){
            this.name = name;
            this.age = age;
            this.sex = sex;
            this.sing = function(song){
                console.log(song);
            }
        }
        var star1 = new Star('刘德华',18,'男');
        star1.sing('冰雨');
        console.log(star1.name);
        //for in 遍历对象
        for(var k in star1){
            console.log(k); // 得到属性名
            console.log(star1[k]); // 得到属性值
        }

        //Math对象
        console.log(Math.PI);
        console.log(Math.max(1,33,55));
        //返回俩个数之间的随机整数（包含这俩个数）
        function getRandomIntInclusive(min, max) {
            min = Math.ceil(min);
            max = Math.floor(max);
            return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值，含最小值
}
        console.log(getRandomIntInclusive(1,10));


        //日期对象   是一个构造函数，new
        var date = new Date();
        //没有跟参数，返回当前时间
        console.log(date);
        //参数写法   2023,1,14 或 '2023-1-14 6:6:6'
        var date1 = new Date('2023-1-14 6:6:6');
        console.log(date1);
        //返回的月份小一个月 要+1
        
        //倒计时
        function countDown(time){
            var nowTime = +new Date();//当前时间总的毫秒数
            var inputTime = +new Date(time);//用户输入时间的毫秒数
            var times = (inputTime - nowTime)/ 1000;// 换算成秒
            var d = parseInt(times / 60 /60 /24); //天
            d = d < 10 ? '0' + d : d ;
            var h = parseInt(times / 60 /60 % 24);//时
            var m = parseInt(times / 60 % 60);//分
            var s = parseInt(times % 60);// 秒
            return d + '天' + h + '时' + m + '分' + s + '秒';
        }
        console.log(countDown('2023-1-13 18:00:00'));
        var date = new Date();
        console.log(date);


        //数组
        //判断是否为数组 instanceof
        var arr = [];
        var obj = {};
        console.log(arr instanceof Array);
        console.log(obj instanceof Array);
        //.isArray
        console.log(Array.isArray(arr));
        console.log(Array.isArray(obj));

        //添加数组
        //push 在末尾添加
        var arr = [1,2,3];
        arr.push(4,6);  // push 完后的返回值是新数组的长度
        console.log(arr);
        //unshift 在开头添加
        arr.unshift('hi');  // unshift 返回值也是数组长度
        console.log(arr);
        //pop 删除最后一个元素
        console.log(arr.pop()); // 返回删除的元素
        console.log(arr);
        //shift 删除最前面一个
        console.log(arr.shift()); // 返回删除的元素
        console.log(arr);


        //数组排序
        var arr1 = [23,12,323,1212,24];
        arr1.sort(function(a,b){
            // return a - b ; // 升序
            return b - a ; // 降序
        })
        console.log(arr1);



    </script>
</head>
<body>
    
</body>
</html>